

#import <Foundation/Foundation.h>

#import <stdlib.h>

#define kRow 5
#define kCol 11

// 迷宫图
char map[kRow][kCol] = {
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
    {'#', '#', 'O', '#', '#', ' ', ' ', ' ', ' ', '#', '#'},
    {'#', '#', ' ', '#', '#', ' ', '#', '#', ' ', '#', '#'},
    {'#', '#', ' ', ' ', ' ', ' ', '#', '#', ' ', '#', '#'},
    {'#', '#', '#', '#', '#', '#', '#', '#', ' ', '#', '#'}
};

int currentRow = 1;
int currentCol = 2;

// 打印地图
void showMap() {
    for (int i = 0; i < kRow; i ++) {
        for (int j = 0; j < kCol; j ++) {
            printf("%c ", map[i][j]);
        }
        printf("\n");
    }
}
// 获取输入
char getValue() {
    printf("请输入小人移动方向，w 上，s 下， a 左， d 右：");
    char action = '0';
    rewind(stdin);
    scanf("%c", &action);
    return action;
}

void up() {
    int row = currentRow-1;
    int col = currentCol;
    if (map[row][col] == ' ') {
        char temp = map[currentRow][currentCol];
        map[currentRow][currentCol] = map[row][col];
        map[row][col] = temp;
        currentRow -= 1;
    }
}

void down() {
    int row = currentRow+1;
    int col = currentCol;
    if (map[row][col] == ' ') {
        char temp = map[currentRow][currentCol];
        map[currentRow][currentCol] = map[row][col];
        map[row][col] = temp;
        currentRow += 1;
    }
}

void left() {
    int row = currentRow;
    int col = currentCol-1;
    if (map[row][col] == ' ') {
        char temp = map[currentRow][currentCol];
        map[currentRow][currentCol] = map[row][col];
        map[row][col] = temp;
        currentCol -= 1;
    }
}

void right() {
    int row = currentRow;
    int col = currentCol+1;
    if (map[row][col] == ' ') {
        char temp = map[currentRow][currentCol];
        map[currentRow][currentCol] = map[row][col];
        map[row][col] = temp;
        currentCol += 1;
    }
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        
        /**
         # 代表墙  空格 代表路  O 代表人
         
         1. 先将迷宫‘样式’输出，用数组将 # 空格 O 使用数组存储起来
         2. 使用scanf函数接受用户输入操作 w 上，s 下， a 左， d 右
         3. 根据接收过来的操作，判断相应数组的对应位置是墙还是路
         4. 如果是路，就交换当前人的位置和目标位置
        */
        
        
        while (1) {
            // 清空屏幕所有显示内容
            system("clear");
            // 显示地图
            showMap();
            if (currentRow == kRow-1 && currentCol == kCol-3) {
                printf("厉害了我的小伙伴！！！\n");
                return 0;
            }
            // 接收用户的操作
            char action = getValue();
            
            // 3. 根据接收过来的操作，判断相应数组的对应位置是墙还是路
            // 4. 如果是路，就交换当前人的位置和目标位置
            switch (action) {
                case 'w':
                case 'W':
                    up();
                    break;
                    
                case 's':
                case 'S':
                    down();
                    break;
                    
                case 'a':
                case 'A':
                    left();
                    break;
                    
                case 'd':
                case 'D':
                    right();
                    break;
                    
                case 'q':
                case 'Q':
                    printf("结束游戏\n");
                    printf("智商不足，请充值！\n");
                    return 0;
                    break;
            }
        }
    }
    return 0;
}
